#include <iostream>

namespace NamespaceA {
  int a;
  extern int b;

  void print() {
    std::cout << "NamespaceA::print() a: " <<  a << std::endl;
    std::cout << "NamespaceA::print() b: " <<  b << std::endl;
  }

  namespace NamespaceB {
    struct Person {
      char name[12];
      int age;
    };

    void print() {
      // 读取 NamespaceA 下变量,不用使用 NamespaceA::a
      std::cout << "NamespaceA::NamespaceB::print() a: " <<  a << std::endl;
      // 使用 NamespaceA::a 也可以
      std::cout << "NamespaceA::NamespaceB::print() a: " << NamespaceA::a << std::endl;
    }
  }
}

void print(NamespaceA::NamespaceB::Person p) {
  std::cout << "global print() Person: " <<  p.name << " -- " << p.age << std::endl;
}

int main() {
  NamespaceA::a = 20;
  NamespaceA::print();
  NamespaceA::NamespaceB::print();

  using NamespaceA::NamespaceB::Person;

  Person p = { "Mango", 18 }; 
  print(p);

  return 0;
}
